<?php
	class DependenciesController extends AppController
	{
		var $name = 'Dependencies';
		var $helpers = array('html', 'form','time','javascript','Pagination'); 
        var $namedArgs = TRUE;
        var $argSeparator = "="; 
		var $layout = 'menu';

        // Filtro para el obtener los atributos que vienen del get
        var $beforeFilter = array('getNamedArgs'); 
	          
        // Modelos que usa el controlador
        var $uses = array('Dependency','Task_dependency');
	          
        // Componentes que usa el controlador, por ahora en realidad no
        var $components = array('Pagination');

	          

		/*Desc: Funcion que retorna el nombre de la dependencia y la sede a la que
		pertenece
		 Autor: Ezequiel Alvarez (copiada de una de Mauro)
		*/
		/*La funcion devuelve Array(id => 'nombre, "sede" sede')*/
		function obtenerDatosAMostrar()
		{
	
			$conditions = null;
			$fields = 'id,nombre,sede';
			$dependencies = $this->Dependency->findAll ($conditions, $fields);
			$return = array();

			foreach ($dependencies as $dependency)
			{
				$return[$dependency['Dependency']['id'] ] = $dependency['Dependency']['nombre'].', sede '.$dependency['Dependency']['sede'];
			}

			return $return; 
		}




		/*Desc: Muestra los datos completos de la dependencia seleccionada.
		  Autor: Ezequiel Alvarez
		*/
		function ver ($id)
		{
			if (isset($id))
			{
				//Obtengo los datos de la dependencia en cuestion.
				$dependencia = $this->Dependency->findByid($id);
				$this->set('datos_dependencia', $dependencia);
			}
		}
		
		function index()
		{
			// Si me dan algo por get, es que se tiene que realizar una accion
			  	if (isset($this->namedArgs['id']))
				{
				   if (isset($this->namedArgs['accion']))
				   {
						$id     = $this->namedArgs['id'];
						$accion = $this->namedArgs['accion'];
						if ($accion=="del")				// Se tiene que borrar a una persona
								$this->Dependency->del($id);
						else if ($accion=="edit")			// Se tiene que editar a una persona
								$this->redirect("/dependencies/add/id=$id");     
					}
				}
				
				$this->pageTitle = 'Dependencia';
				
				$criteria=NULL;
				$this->Pagination->show = 5; //Cantidad de personas por pagina
				list($order,$limit,$page) = $this->Pagination->init($criteria); // Added
				$data = $this->Dependency->findAll($criteria, NULL, $order, $limit, $page); // Extra parameters added
				$this->set('dependencias',$data); 
		}
		
		function isDependencyExist()
		{
			$dependencia = $this->Dependency->find("nombre='".$this->data['Dependency']['nombre']."' AND sede='".$this->data['Dependency']['sede']."'");
			if ($dependencia)
			{
				// Se verifica los ids por si estoy actualizando
				if (isset($this->data['Dependency']['id']) && $dependencia['Dependency']['id']== $this->data['Dependency']['id'])
					return false;
					
				//Error porque la persona ya existe
				$this->set('action','edit');
				$this->set('error','Error: El nombre ya existe, cambielo por favor');
				$this->set("dependencia",$this->data);
				return true;
			}
			return false;
		}
		
		
		function add()
		{
			$this->set('size','20');

			// Si se le pasa el id, es que es edicion
            if (isset($this->namedArgs['id']))
			{
				$this->pageTitle = 'Editar Dependencia';

				// Se setea la accion como edicion
				$this->set('action','edit');
				$id =$this->namedArgs['id'];

				// Se obtiene la dependencia
				$dependencia = $this->Dependency->find("id=$id");
				$this->set("dependencia",$dependencia);
				
				//se obtienen las tareas de la dependencia
				$this->set("tareas_dependencia",$this->Task_dependency->findAll("id_dependencia=$id"));
				$this->set("tareas",$this->requestAction("Tasks/obtenerDatosAMostrar"));
			}
			else
			{
				// Se setea la accion como para agregar una persona
				$this->set('action','add');

				if (!empty($this->data))
				{                        	      
					if ($this->isDependencyExist())
					{
						$this->render();
						return;
					}
					
					if ($this->Dependency->save($this->data['Dependency']))
					{
		                                
						$this->redirect('/dependencies/index');
					}
		                        
				}
	                       
			}
        }
		
        // Me da los parametro que vienen por GET
        function getNamedArgs() 
		{
                if ($this->namedArgs)
                {
                    $this->namedArgs = array();
                    if (!empty($this->params['pass']))
                    {
                        foreach ($this->params['pass'] as $param)
                        {
                            if (strpos($param, $this->argSeparator))
                            {
                                list($name, $val) = split( $this->argSeparator, $param );
                                $this->namedArgs[$name] = $val;
                            }
                        }
                    }
                }
                return TRUE;
        } 

		// Se actualizan los datos de una dependencia
		function update()
		{
			if ($this->isDependencyExist())
			{
				$this->set('size','20');
				$this->render('add');
				return;
			}	
									
			// Se actualiza los datos de la dependencia
			$this->Dependency->update($this->data['Dependency']);
	
			// Se redirecciona a la pagina que lista las personas
			$this->redirect('/dependencies/index');
		}
		
		function add_task()
		{
			// Me fijo si no esta agregado ya
			$id_funcion = $this->data['Task_dependency']['id_funcion'];
			$id_dependencia = $this->data['Dependency']['id'];
			
			if(! $this->Task_dependency->find('id_dependencia='.$id_dependencia.' AND id_funcion='.$id_funcion) )
			{
				$this->data['Task_dependency']['id_dependencia'] = $id_dependencia;
				$this->Task_dependency->save($this->data['Task_dependency']);
			}
	
			// Se redirecciona a la pagina que lista las personas
			$this->redirect('/dependencies/add/id='.$id_dependencia);
		}
		
		//borra tarea de la dependencia		
		function del_task()
		{
			if( isset($this->namedArgs['id_funcion']) && isset($this->namedArgs['id_dependencia']) )
			{
				// Me fijo si no esta agregado ya
				$id_funcion = $this->namedArgs['id_funcion'];
				$id_dependencia = $this->namedArgs['id_dependencia'];
				
				$task_dep = $this->Task_dependency->find('id_dependencia='.$id_dependencia.' AND id_funcion='.$id_funcion);
				if($task_dep)
				{
					echo 'ID='.$this->Task_dependency->getID($task_dep);
					//$this->Task_dependency->del( $task_dep['Task_dependency'][$this->Task_dependency->primaryKey] );
					// Se redirecciona a la pagina que lista las personas
					//$this->redirect('/dependencies/add/id='.$id_dependencia.'/bien=1/');
				}
				else
				{
				// Se redirecciona a la pagina que lista las personas
				//$this->redirect('/dependencies/add/id='.$id_dependencia.'/mal=1/');
				}
		
			}
		}
		
		// Se borra una dependencia
		function del()
		{
			$this->pageTitle = "Eleminar dependencias";
			if (!empty($this->data['Dependency']['id']))
			{
				$this->Dependency->del($this->data['Dependency']['id']);       
				$this->redirect('/dependencies/index');
			}
								 
		}
		
		// Se borra una lista de dependencias seleccionadas
		function del_seleccion(){
			if (!empty($this->data)){
				foreach ($this->data['Dependency'] as $key => $dependency):
					if ($dependency != 0 ){
						$this->Dependency->del(ltrim($key));
					}
						
				endforeach;
			}
			$this->redirect('/dependencies/index');
		}
		
    	/*
    		Funcion que permite buscar dependencias.
    		Se puedo buscar por:
    			- Nombre 
    			- Sede
    			- Nombre y sede
    	*/
    	function find()
		{
			$nombre = $this->data['Dependency']['nombre'];
			$sede = $this->data['Dependency']['sede'];
	    	
			if ($nombre != '' || $sede!='')
			{
				$query = '';
				if ($nombre != ''){
					// Se busca por nombre y se si existe por sede
					$query = 'nombre LIKE "%'.$nombre.'%"'.($sede!=''?' AND sede LIKE "%'.$sede.'%"':'');
				}
				else if ($sede != '')
				{
					// Se busca solamente por sede
					$query = 'sede LIKE "%'.$sede.'%"';
				}

				// Se setea el resultado para que la vista lo pueda renderisar
				 $result = $this->Dependency->findAll($query);
				 if ($result){
					$this->set('paging',0);				        
					$this->set('titulo',"Resultado de la busqueda");
					$this->set('dependencias', $result);
					$this->render('index');
				}else{
					$this->set('error','No se encontraron resultados');
					$this->render();
				}
			}
    	}
		
	}

?>
